#include <stdio.h>
#include "queue.h"
#include "rand.h"
#include <stdlib.h>


/**
 * @brief 
 * 
 * 
 * 
 *  开源的简单队列测试，
 *  数据量：500 ，
 *  测试结果：出入对数据有差异，目前不可用，数据量为100时，测试正常
 *      
 * note：
 *      本工程使用Ninja构建，速度嘎嘎快
 *      运行build.bat一键构建、运行
 */

/**
 
 * 创建 10条队列， 
    每一个队列创建5个线程去读写操作，其中4个写，一个读，
    每个写线程随机触发写随机字节数（数据前后加标签和数据校验用于验证数据正确性、连续性），读作为验证线程
 * 
 */
#define Q_UART_BUFFER_SIZE (10 * 1024)

Queue_Handle_t qUartTx;
static QueueDataType_t BufferUartTx[Q_UART_BUFFER_SIZE];

void user_task_pthrad(void *arg)
{
    int id = (int)arg;
    while (1)
    {
        if (id == 4)    // 读线程
        {
            // TODO: 随机写队列
        }else
        {

        }
    }
}

int main(void)
{
    QueueDataType_t temp;

    // 初始化队列
    Queue_Init(&qUartTx, BufferUartTx, Q_UART_BUFFER_SIZE);

    printf("push all: ");
    for (uint32_t i = 0; i < 500; i++)
    {
        char chr =  generate_random_ascii();
        Queue_Push(&qUartTx, chr);
        printf("%c", chr);
    }
    printf("\n");

    char *pdata = (char *)malloc(500 + 5);

    uint16_t ret = Queue_Pop_Array(&qUartTx, pdata, 500);
    printf("pop  all: %s == len %d", pdata, ret);
    free(pdata);

    for (int i = 0; i < 5; i++)
    {
        creat_pthrad(user_task[i], user_task_pthread, (void *)i);
    }
    
    while (1)
    {
        // // 入队
        // Queue_Push(&qUartTx, 'Q');
        // Queue_Push(&qUartTx, 'u');
        // Queue_Push(&qUartTx, 'e');
        // Queue_Push(&qUartTx, 'u');
        // Queue_Push(&qUartTx, 'e');

        // // 出队
        // Queue_Pop(&qUartTx, &temp);
        // printf("pop %c\n", temp);
        // Queue_Pop(&qUartTx, &temp);
        // printf("pop %c\n", temp);
        // Queue_Pop(&qUartTx, &temp);
        // printf("pop %c\n", temp);
        // Queue_Pop(&qUartTx, &temp);
        // printf("pop %c\n", temp);
        // Queue_Pop(&qUartTx, &temp);
        // printf("pop %c\n", temp);


        // Queue_Push_Array()
        break;
    }
}